from flask import Flask,render_template,request
import json
import pymysql
from pymysql.cursors import DictCursor


app = Flask(__name__)


'''
注册与登录
'''
# 登录
@app.route("/user/login", methods=["POST"])
def login():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '登录成功'}
    if request.method == "POST":
        # 处理JSON数据（Content-Type: application/json）
        data = request.get_json()
        username = data.get("username")
        password = data.get("password")
        # 验证用户名和密码（示例逻辑）
        if username != "" and password != "":
            # 对参数进行操作
            sql = f"SELECT CAST(user_name AS CHAR) AS user_name FROM user_tal WHERE user_name = '{username}' AND user_pws = '{password}';"
            temp = getData(sql)
            if temp[0]['user_name'] == username:
                return_dict['result'] = True
                return json.dumps(return_dict, ensure_ascii=False)
            else:
                return_dict['code'] = 201
                return_dict['msg'] = "登录失败"
                return json.dumps(return_dict, ensure_ascii=False)
        else:
            # return_dict['result'] = {}
            return_dict['code'] = 201
            return_dict['msg'] = "登录失败"
            return json.dumps(return_dict, ensure_ascii=False)
    else:
        # return_dict['result'] = {}
        return_dict['code'] = 201
        return_dict['msg'] = "登录失败"
        return json.dumps(return_dict, ensure_ascii=False)
    # 对参数进行操作

#  注册
@app.route("/user/register", methods=["POST"])
def register():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '注册成功!'}
    if request.method == "POST":
        # 处理JSON数据（Content-Type: application/json）
        data = request.get_json()
        username = data.get("userName")
        password = data.get("userPassword")
        email = data.get("userEmail")
        phone = data.get("userPhone")
        # 验证用户名和密码（示例逻辑）
        # 构造SQL插入语句
        sql = "INSERT INTO user_tal VALUES (NULL, %s, %s, %s, %s);"
        values = (username, password, email, phone)
        print(values)
        if username != '' and password != '':
            print("------------1")
            re = insert(sql, values)
            print(re)
            if re > 0:
               print("------------2")
               return_dict['result'] = True
               return json.dumps(return_dict, ensure_ascii=False)
            else:
                print("------------3")
                return_dict['code'] = 201
                return_dict['msg'] = "注册失败!"
                return json.dumps(return_dict, ensure_ascii=False)
        else:
            return_dict['code'] = 201
            return_dict['msg'] = "注册失败!"
            return json.dumps(return_dict, ensure_ascii=False)
    else:
        # return_dict['result'] = {}
        return_dict['code'] = 201
        return_dict['msg'] = "注册失败!"
        return json.dumps(return_dict, ensure_ascii=False)

#  map
@app.route("/map", methods=["GET"])
def getMap():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT `count`, `long`, `dim` FROM ads_countr_count;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

#  热门国家球员词云
@app.route("/data1", methods=["GET"])
def getData1():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT `countr`, `count` FROM ads_countr_count;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 热门球员比赛场次分布词云
@app.route("/data2", methods=["GET"])
def getData2():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT * FROM(SELECT displayName, Games FROM ads_displayName_Games ORDER BY CONVERT(Games,SIGNED) DESC)t LIMIT 0 , 50;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 球员学历分布
@app.route("/data3", methods=["GET"])
def getData3():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT schooltype, `count` FROM ads_schooltype_count WHERE schooltype NOT IN ('', 'From', 'None' , 'Last AFfiliation');"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 球员城市分布
@app.route("/data4", methods=["GET"])
def getData4():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT `city`, `count` FROM ads_city_count LIMIT 0, 10;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 球员分区分布统计
@app.route("/data5", methods=["GET"])
def getData5():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT * FROM ads_division_count WHERE `division` NOT IN ('');"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 球员联盟分布统计
@app.route("/data6", methods=["GET"])
def getData6():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT * FROM ads_conference_count WHERE `conference` NOT IN ('');"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 员球队分布统计
@app.route("/data7", methods=["GET"])
def getData7():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT * FROM ads_team_name WHERE `team` NOT IN ('');"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 球员比赛场次分布统计
@app.route("/data8", methods=["GET"])
def getData8():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT * FROM(SELECT displayName, Games FROM ads_displayName_Games ORDER BY CONVERT(Games, SIGNED) DESC)t LIMIT 0 , 10;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 退役球员身高分布统计
@app.route("/data9", methods=["GET"])
def getData9():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT REPLACE(heightMetric, '米','')heightMetric, `count` FROM ads_old_heightMetric ORDER BY heightMetric;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)
# 现役球员身高分布统计
@app.route("/data10", methods=["GET"])
def getData10():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT REPLACE(heightMetric, '米','')heightMetric, `count` FROM ads_new_heightMetric ORDER BY heightMetric;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)


# 退役球员体重分布统计
@app.route("/data11", methods=["GET"])
def getData11():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT REPLACE(weightMetric, '公斤','')weightMetric, `count` FROM ads_old_weightMetric WHERE `count` NOT IN('1', '2') AND weightMetric NOT IN ('1.85米') ORDER BY CONVERT(weightMetric, SIGNED);"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)
# 退役球员体重分布统计
@app.route("/data12", methods=["GET"])
def getData12():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT REPLACE(weightMetric, '公斤','')weightMetric, `count` FROM ads_new_weightMetric WHERE `count` NOT IN('1', '2') ORDER BY CONVERT(weightMetric, SIGNED);"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 退役球员位置分布统计
@app.route("/data13", methods=["GET"])
def getData13():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT * FROM ads_old_position ORDER BY `position`;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 现役球员位置分布统计
@app.route("/data14", methods=["GET"])
def getData14():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT * FROM ads_new_position ORDER BY `position`;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)


# 球员得分分布统计
@app.route("/data15", methods=["GET"])
def getData15():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT displayName,ROUND(`avg`, 2)`avg` FROM ads_displayName_pointspg  WHERE `displayName` IN ('哈基姆 奥拉朱旺' ,'吉尔伯特 阿里纳斯', '德怀恩 韦德','勒布朗 詹姆斯','迈克尔 乔丹', '科比 布莱恩特', '埃尔文 约翰逊', '斯蒂芬 库里', '沙奎尔 奥尼尔', '斯科蒂 皮蓬') ORDER BY displayName;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 球员篮板分布统计
@app.route("/data16", methods=["GET"])
def getData16():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT displayName, ROUND(`avg`, 2)`avg` FROM ads_displayName_Rebspg WHERE `displayName` IN ('哈基姆 奥拉朱旺' ,'吉尔伯特 阿里纳斯', '德怀恩 韦德','勒布朗 詹姆斯','迈克尔 乔丹', '科比 布莱恩特', '埃尔文 约翰逊', '斯蒂芬 库里', '沙奎尔 奥尼尔', '斯科蒂 皮蓬') ORDER BY displayName;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)


# 球员助攻分布统计
@app.route("/data17", methods=["GET"])
def getData17():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT displayName, ROUND(`avg`, 2)`avg` FROM ads_displayName_Assistspg WHERE `displayName` IN ('哈基姆 奥拉朱旺' ,'吉尔伯特 阿里纳斯', '德怀恩 韦德','勒布朗 詹姆斯','迈克尔 乔丹', '科比 布莱恩特', '埃尔文 约翰逊', '斯蒂芬 库里', '沙奎尔 奥尼尔', '斯科蒂 皮蓬') ORDER BY displayName;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 球员抢断分布统计
@app.route("/data18", methods=["GET"])
def getData18():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT `displayName`, ROUND(`avg`, 2)`avg` FROM ads_displayName_Stealspg WHERE `displayName` IN ('哈基姆 奥拉朱旺' ,'吉尔伯特 阿里纳斯', '德怀恩 韦德','勒布朗 詹姆斯','迈克尔 乔丹', '科比 布莱恩特', '埃尔文 约翰逊', '斯蒂芬 库里', '沙奎尔 奥尼尔', '斯科蒂 皮蓬') ORDER BY displayName;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)



# 球员盖帽分布统计
@app.route("/data19", methods=["GET"])
def getData19():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT `displayName`, ROUND(`avg`, 2)`avg` FROM ads_displayName_Blockspg WHERE `displayName` IN ('哈基姆 奥拉朱旺' ,'吉尔伯特 阿里纳斯', '德怀恩 韦德','勒布朗 詹姆斯','迈克尔 乔丹', '科比 布莱恩特', '埃尔文 约翰逊', '斯蒂芬 库里', '沙奎尔 奥尼尔', '斯科蒂 皮蓬') ORDER BY displayName;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)



# 球员平均投篮命中率分布统计
@app.route("/data20", methods=["GET"])
def getData20():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT `displayName`, ROUND(`avg`, 2)`avg` FROM ads_displayName_Fgpct WHERE `displayName` IN ('哈基姆 奥拉朱旺' ,'吉尔伯特 阿里纳斯', '德怀恩 韦德','勒布朗 詹姆斯','迈克尔 乔丹', '科比 布莱恩特', '埃尔文 约翰逊', '斯蒂芬 库里', '沙奎尔 奥尼尔', '斯科蒂 皮蓬') ORDER BY displayName;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)


# 球员平均三分命中数分布统计
@app.route("/data21", methods=["GET"])
def getData21():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT `displayName`, ROUND(`avg`, 2)`avg` FROM ads_displayName_Tpm WHERE `displayName` IN ('哈基姆 奥拉朱旺' ,'吉尔伯特 阿里纳斯', '德怀恩 韦德','勒布朗 詹姆斯','迈克尔 乔丹', '科比 布莱恩特', '埃尔文 约翰逊', '斯蒂芬 库里', '沙奎尔 奥尼尔', '斯科蒂 皮蓬') ORDER BY displayName;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 球员平均三分命中率分布统计
@app.route("/data22", methods=["GET"])
def getData22():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT `displayName`, ROUND(`avg`, 2)`avg` FROM ads_displayName_Tppct WHERE `displayName` IN ('哈基姆 奥拉朱旺' ,'吉尔伯特 阿里纳斯', '德怀恩 韦德','勒布朗 詹姆斯','迈克尔 乔丹', '科比 布莱恩特', '埃尔文 约翰逊', '斯蒂芬 库里', '沙奎尔 奥尼尔', '斯科蒂 皮蓬') ORDER BY displayName;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)


# 球员平均罚球命中率分布统计
@app.route("/data23", methods=["GET"])
def getData23():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT `displayName`, ROUND(`avg`, 2)`avg` FROM ads_displayName_Ftpct WHERE `displayName` IN ('哈基姆 奥拉朱旺' ,'吉尔伯特 阿里纳斯', '德怀恩 韦德','勒布朗 詹姆斯','迈克尔 乔丹', '科比 布莱恩特', '埃尔文 约翰逊', '斯蒂芬 库里', '沙奎尔 奥尼尔', '斯科蒂 皮蓬') ORDER BY displayName;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)



#退役球员球队分布统计
@app.route("/data24", methods=["GET"])
def getData24():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT * FROM ads_old_teamName ORDER BY teamName;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

#现役球员球队分布统计
@app.route("/data25", methods=["GET"])
def getData25():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT * FROM ads_new_teamName ORDER BY teamName;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 退役球号分布统计
@app.route("/data26", methods=["GET"])
def getData26():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT * FROM ads_old_jerseyNo LIMIT 0 , 20;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

# 现役球号分布统计
@app.route("/data27", methods=["GET"])
def getData27():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT * FROM ads_new_jerseyNo LIMIT 0 , 20;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)


# info TODO 数据管理
@app.route("/dataNum", methods=["GET"])
def getDataNum():
    # 默认返回内容
    return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
    # 对参数进行操作
    sql = "SELECT COUNT(*) `data` FROM ads_ball_player;"
    return_dict['result'] = getData(sql)
    return json.dumps(return_dict, ensure_ascii=False)

@app.route("/datainfo", methods=["POST"])
def getDataInfo():
    if request.method == "POST":
        # 处理JSON数据（Content-Type: application/json）
        data = request.get_json()
        start = data.get("start")
        end = data.get("end")
    # 默认返回内容
        return_dict = {'code': 200, 'result': False, 'msg': '请求成功'}
        # 对参数进行操作
        sql = f"SELECT * FROM ads_ball_player LIMIT {start}, {end};"
        return_dict['result'] = getData(sql)
        return json.dumps(return_dict, ensure_ascii=False)
'''
功能函数-查询模板
** 存在sql注入
'''
def getData(sql):
    url = "192.168.6.166"
    db = "shaojun"
    userName = "root"
    pws = "123456"
    conn = pymysql.connect(host = url, database = db, user = userName, password = pws, charset='utf8')
    cursor = conn.cursor(DictCursor)
    cursor.execute(sql)
    result = cursor.fetchall()
    conn.close()
    return result

'''
插入数据
'''
def insert(sql, values):
    url = "192.168.6.166"
    db = "shaojun"
    userName = "root"
    pws = "123456"
    conn = pymysql.connect(host = url, database = db, user = userName, password = pws, charset='utf8')
    # 获取游标对象
    cursor = conn.cursor()
    cursor.execute(sql, values)
    # 提交到数据库执行
    conn.commit()
    # 结果
    result = cursor.rowcount
    # 关闭游标和连接
    cursor.close()
    conn.close()
    return result


# 主页路径
@app.route('/')
def hello_world():  # put application's code here
    return render_template("index.html")


# 启动
if __name__ == '__main__':
    app.run()